05.Dockerfile

Dockerfile

什么是 Dockerfile?

Dockerfile 就是一个文本文件,其中包含一个个的指令 (Instruction),用指令来说明要执行什么操作来构建 image。每一个指令都会形成一层 Layer。

指令 说明 示例
FROM 指定基础镜像 FROM centos:6
ENV 设置环境变量,可在后面指令使用 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./mysql-5.7.rpm /tmp
RUN 执行 Linux 的 shell 命令,一般是安装过程的命令 RUN yum install gcc
EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的 EXPOSE 8080
Entrypoint是 镜像中应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar

docker build

docker build 是 Docker 中用于从 Dockerfile 构建镜像的命令。通过此命令,你可以根据 Dockerfile 文件中的指令来自动化构建一个镜像。

基本语法

docker build [OPTIONS] PATH | URL | -

常用选项

给构建的镜像指定一个标签(名称:版本)。标签用于标识构建的镜像。

docker build -t myimage:v1 .

指定 Dockerfile 的路径。如果你的 Dockerfile 不在当前目录或文件名不是 Dockerfile,可以使用此选项。

docker build -f /path/to/Dockerfile .

禁用缓存。默认情况下,Docker 会缓存中间层(层级缓存),以便在下次构建时加快构建过程。如果你不希望使用缓存,可以添加此选项。

docker build --no-cache -t myimage:v1 .

定义构建时的环境变量(构建参数)。可以在 Dockerfile 中使用 ARG 指令引用。

docker build --build-arg MY_ARG=value -t myimage:v1 .
docker build --pull -t myimage:v1 .
docker build --rm=false -t myimage:v1 .
docker build -q -t myimage:v1 .

示例

docker build -t myapp:latest .
docker build -f /path/to/Dockerfile --build-arg VERSION=1.0 -t myapp:1.0 .
docker build --no-cache -t myapp:v2 .

案例

基于 Ubuntu 镜像构建一个新的 image,运行一个 FCMHttpV1 项目

|500

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK安装目录
ENV JAVA_DIR=/usr/local

# 拷贝JDK和Spring Boot包
COPY ./jdk-17.0.12_linux-x64_bin.tar.gz $JAVA_DIR/
COPY ./FCMHttpV1.jar /tmp/app.jar

# 安装JDK
RUN cd ${JAVA_DIR} \
    && tar -xf ./jdk-17.0.12_linux-x64_bin.tar.gz \
    && mv ./jdk-17.0.12 ./java17/

# 配置环境变量
ENV JAVA_HOME=${JAVA_DIR}/java17
ENV PATH=$PATH:${JAVA_HOME}/bin

# 暴露端口
EXPOSE 11111
# 入口
ENTRYPOINT java -jar /tmp/app.jar
# 构建
docker build -t javaweb:1.0 .

查看 image :

docker images

|500

添加防火墙规则:

# 放行11111端口
firewall-cmd --zone=public --add-port=11111/tcp --permanent
# 查看所有打开的端口
firewall-cmd --zone=public --list-ports

运行:

docker run --name fcm -p 11111:11111 -d javaweb:1.0